# 1、写函数,将传入的列表或元祖对象的奇数位索引对应的元素,
# def extract_odd_index_elements(data):
#     result = []
#     for i in range(len(data)):
#         if i % 2 != 0:
#             result.append(data[i])
#     return result
# # 测试示例
# lst = [1, 2,  3, 4, 5, 6, 7]
# tpl = (10, 20, 30, 40, 50, 60, 70)
# # 提取列表中奇数索引对应的元素
# extracted_lst = extract_odd_index_elements(lst)
# print("列表中奇数索引对应的元素:", extracted_lst)
# # 提取元组中奇数索引对应的元素
# extracted_tpl = extract_odd_index_elements(tpl)
# print("元组中奇数索引对应的元素:", extracted_tpl)


# 2、写函数,判断用户传入的对象(string,list,tuple)长度是否大于5
def check_length(obj):
    if len(obj) > 5:
        return True
    else:
        return False
# 测试示例
# string = "Hello, World!"
# list = [1, 2, 3, 4, 5, 6, 7]
# tuple = (10, 20, 30, 40, 50, 60, 70)
#
# # 判断字符串长度是否大于5
# if check_length(string):
#     print("字符串长度大于5")
# else:
#     print("字符串长度不大于5")
#
# # 判断列表长度是否大于5
# if check_length(list):
#     print("列表长度大于5")
# else:
#     print("列表长度不大于5")
#
# # 判断元组长度是否大于5
# if check_length(tuple):
#     print("元组长度大于5")
# else:
#     print("元组长度不大于5")
# 3、写函数,计算传入的string中,数字,字母,空格以及其它内容的个数,并返回结果
# def aoligei(string):
#     return len(string)
# string = "Hello, World!"
# sum = 0
# sum1 = 0
# sum2 = 0
# sum3 = 0
# for i in range(len(string)):
#     if ord(string[i])>47 and ord(string[i])<58:
#         sum += 1
#     elif ord(string[i])>64 and ord(string[i])<123:
#         sum1 += 1
#     elif ord(string[i]) == 32:
#         sum2 += 1
#     else:
#         sum3 += 1
#         print(f"数字有{sum}个")
#         print(f"字母有{sum1}个")
#         print(f"空格有{sum2}个")
#         print(f"其他有{sum3}个")
# 4、写函数,接收两个数字参数,返回较大的那个数字
# def find_max(num1, num2):
#     if num1 > num2:
#         return num1
#     else:
#         return num2
# # 测试示例
# num_a = 10
# num_b = 20
# # 找出较大的数字
# max_num = find_max(num_a, num_b)
# print("较大的数字是:", max_num)
# 5、编写一个函数cacluate, 可以接收任意多个数,返回的是一个元组.
# 元组的第一个值为所有参数的平均值, 第二个值是大于平均值的所有数.

# 6、编写一个函数, 接收字符串参数, 返回一个元组,
# 元组的第一个值为大写字母的个数, 第二个值为小写字母个数.
# def count_upper_lower(string):
#     upper_count = 0
#     lower_count = 0
#     for char in string:
#         if char.isupper():
#             upper_count += 1
#         elif char.islower():
#             lower_count += 1
#     return (upper_count, lower_count)
# # 测试示例
# input_string = "Hello World"
# # 统计大写字母和小写字母的个数
# result = count_upper_lower(input_string)
# print("大写字母个数:", result[0])
# print("小写字母个数:", result[1])
# 7、编写函数, 接收一个列表(包含30个1~100之间的随机整形数)
# 和一个整形数k, 返回一个新列表.
# 函数需求:
# 将列表下标k之前对应(不包含k)的元素逆序;
# 将下标k及之后的元素逆序;
# 
# 8、编写函数，从键盘输入参数x和n，计算并显示形如x+xx +xxx + xxxx + xxxxx+xxx…xxx+ 的表达式前n项的值
# def calculate_expression(x, n):
#     result = 0
#     term = x
#
#     for i in range(1, n+1):
#         result += term
#         term = term * 10 + x
#
#     return result
#
# # 从键盘输入参数x和n
# x = int(input("请输入x的值："))
# n = int(input("请输入n的值："))
#
# # 计算并显示表达式前n项的值
# expression_value = calculate_expression(x, n)
# print("表达式前{}项的值为：{}".format(n, expression_value))
# 9、写函数,函数接收的4个参数分别是:姓名,性别(默认为男),年龄,地址
# def print_personal_info(name, gender='男', age=None, address=None):
#     print("姓名：", name)
#     print("性别：", gender)
#
#     if age:
#         print("年龄：", age)
#
#     if address:
#         print("地址：", address)
#
# # 测试示例
# print_personal_info("张三")
# print_personal_info("李四", "女")
# print_personal_info("王五", age=25)
# print_personal_info("赵六", address="北京市朝阳区")
# 用户通过input输入这4个内容(支持持续输入,Q或q退出),并传递给函数
# 
# 函数接收到这些内容,将其追加到student_msg文件中
# 
# 重点:复习文件操作
# 
# 10、写函数,接收n个数字,返回这些数字的和(动态传参)
# def calculate_sum(*args):
#     total = sum(args)
#     return total
#
# # 测试示例
# result = calculate_sum(1, 2, 3, 4, 5)
# print("和为：", result)
#
# result = calculate_sum(10, 20, 30)
# print("和为：", result)
#
# result = calculate_sum(2, 4, 6, 8, 10)
# print("和为：", result)
# 11、在实参中传入多个可迭代对象(要有string,list,tuple,set,dict),将每个对象的每个元素都加到args或kwargs里
# def process_elements(*args, **kwargs):
#     for iterable in args:
#         for element in iterable:
#             kwargs['args'].append(element)
#
#     for iterable in kwargs.values():
#         for element in iterable:
#             kwargs['args'].append(element)
#
#     return kwargs
#
# # 测试示例
# str_list = "abc"
# num_list = [1, 2, 3]
# num_tuple = (4, 5, 6)
# num_set = {7, 8, 9}
# num_dict = {'a': 10, 'b': 11, 'c': 12}
#
# result = process_elements(str_list, num_list, num_tuple, num_set, num_dict)
# print("args:", result['args'])
# print("kwargs:", result['kwargs'])
# 12、写函数,把传过来的列表中的每一个元素都用"_"拼接,并返回
# def join_elements(lst):
#     result = '_'.join(str(element) for element in lst)
#     return result
# my_list = [1, 2, 3, 4, 5]
# result = join_elements(my_list)
# print(result)
# 
# my_list = ['a', 'b', 'c', 'd']
# result = join_elements(my_list)
# print(result)
# 13、写函数,传入一个数字,返回这个数的阶乘
# 重点:累乘
# 
# 示例：1x2x3....
# 
# 14、写函数,返回一个扑克牌列表,里面有52项,每一项都是一个tuple
# 
# 15、用代码写一个99乘法表
# 
# 16、编写函数，求1+2+3+…N的和
# 
# 17、编写一个函数，求多个数中的最大值
# 
# 18、编写一个函数，提取指定字符串中所有的字母，然后拼接在一起产生一个新的字符串
# 
# 19、 定义一个学生注册函数enroll()，打印学生姓名，性别，年龄，城市， 使用默认参数降低调用函数的复杂度
# 
# 20、编写一个函数，接受一个字符串作为参数，并返回其中所有单词的首字母的大写形式
# 
# 21、写一个函数，求多个数的平均值
# 
# 22、写一个自己的len函数，统计指定序列中元素的个数
# 
# 23、找出传入的列表或元组的奇数位对应的元素，并返回一个新的列表
# 
# 24、编写一个函数，接受一个字符串列表作为参数，并返回一个字符串，其中包含所有字符串首字母的大写形式
# 
# 25、定义函数，有一个形参，传入的是列表，数组大小不超过 100个，
# # 数组中的每个元素值不允许超过 100，但是可以等于100，
# # 如果列表大小超过了100个截取到第100个为止，要求返回的列表格式：
# 
# # 删除所有重复元素，使得每个元素只出现一次
# # 按照数字的大小，由高到低排序返回
# 
# 26、定义函数 getLength，打印用户传入的容器类型和数据长度
# 
# 27、定义函数 generateNum( )
# # 返回从0~9的十个数字中随机取出4个不重复的数字组成一个字符串
# 
# 28、定义函数 moreThan(num)，判断输入的数字是否大于1500
# 
# 29、定义函数，有两个形参，第一个形参到第二个形参的范围，所有平方数之和
# 
# 示例：func_a(5,10)
# 5x5+6x6+7x7+8x8+9x9+10x10...
# 
# 30、写函数，检查传入字典的每一个value长度，如果大于2，
# # 那么仅保留前两个长度的内容， 并将新内容返回给调用者
# 
# 31、写函数，判断用户传入的对象（字符串、列表、元组）的元素是否为空
# 
# 32、编写自定义函数，完成一个简单的减法运算函数
# 
# 33、编写自定义函数，可以输出自己的名字即可。
# 
# 34、编写自定义函数：剪刀石头布
# 游戏开始，初始状态下用户和电脑都有 100 分，赢一局+10 分，输一局-10 分。
# 
# 当用户为 0 分时，游戏结束，提示游戏结束，比赛输了
# 
# 当用户为 200 分时，游戏结束，提示游戏结束，赢得比赛、每轮比赛都输出当前的分数
# 
# 1 代表剪刀 2 代表石头 3 代表布
# 
# 35、编写一个函数，接受一个字符串作为参数，并返回该字符串的逆序字符串
# 
# 36、编写一个函数，接受一个数字列表作为参数，并返回其中所有偶数的列表
# 
# 37、编写一个函数，接受一个字符串列表作为参数，并返回其中最长的字符串。
# 
# 38、编写一个函数，接受一个数字列表作为参数，并返回其中所有数字的平方的总和

# # 39、编写一个函数，接受一个整数作为参数，并返回其阶乘